/**
 * 什么是JavaScript？
 *
 * JavaScript 最初被创建出来的目的是“使网页更加生动”。
 * 这些编程语言写出来的程序被称为“脚本”。它可以直接写在 HTML 的网页中，在页面加载的时候自动执行。
 * 它们不需要特殊的准备或编译即可运行。
 *
 * JavaScript 不仅可以在浏览器中执行，也可以在服务端执行，甚至可以在任意搭载了 JavaScript 引擎的设备中执行。
 * 浏览器中嵌入了 JavaScript 引擎，有时也称作 “JavaScript 虚拟机”。
 * 不同的引擎有不同的代号，如：
 * V8 - Chrome、Opera、Edge。
 * SpiderMonkey - Firefox。
 * Chakra - IE。
 * JavaScript - Safari。
 * 如果“V8 支持某个功能”，那么我们可以认为这个功能大概能在 Chrome、Opera、Edge 中正常运行。
 */

/**
 * 引擎如何工作？
 *
 * 引擎很复杂，但是基本原理很简单。
 *
 * 1.引擎（如果是浏览器，则引擎被嵌入在其中）读取（“解析”）脚本。
 * 2.然后，引擎将脚本转化（“编译”）为机器语言。
 * 3.然后，机器代码快速执行。
 *
 */

/**
 * 浏览器中的 JavaScript 能做什么？
 *
 * 现代 JavaScript 是一种“安全的”编程语言。它不提供对内存或 CPU 的底层访问，因为它最初是为浏览器创建的，不需要这些功能。
 *
 * JavaScript 的能力很大程度上取决于它的运行环境。例如 Node.js 支持允许 JavaScript 读取/写入任意文件。
 *
 * 浏览器中的 JavaScript 可以做下面这些事：
 * 1.在网页中添加新的 HTML，修改网页已有内容和网页的样式。
 * 2.响应用户的行为，响应鼠标的点击，指针的移动，按键的按动。
 * 3.向远程服务器发送网络请求，下载和上传文件。
 * 4.获取或设置 cookie，向访问者提出问题或发送消息。
 * 5.记住客户端的数据（“本地存储”）。
 */

/**
 * 浏览器中的 JavaScript 不能做什么？
 *
 * 为了用户的（信息）安全，在浏览器中的 JavaScript 的能力是受限的。目的是防止恶意网页获取用户私人信息或损害用户数据。
 *
 * 此类限制包括：
 * 1.网页中的 JavaScript 不能读、写、复制和执行硬盘上的任意文件。它没有直接访问操作系统的功能。
 * 现代浏览器允许 JavaScript 做一些文件相关的操作，但是这个操作是受限制的。仅当用户做出特定的行为，JavaScript 才能操作这个文件。例如通过 <input> 选择了文件。
 * 有很多与相机/麦克风和其他设备进行交互的方式，但是这些都需要获得用户的明确许可。
 *
 * 2.不同的标签页/窗口之间通常互不了解。如果两个标签页打开的不是同一个网站（域名、协议或者端口任一不相同的网站），它们都不能互相通信。
 * 这就是所谓的“同源策略”。为了解决“同源策略”问题，两个标签页必须 都 包含一些处理这个问题的特定的 JavaScript 代码，并均允许数据交换。
 *
 * 3.JavaScript 可以轻松地通过互联网与当前页面所在的服务器进行通信。但是从其他网站/域的服务器中接受数据的能力被削弱了。
 * 尽管可以，但是需要来自远程服务器的明确协议（在 HTTP header 中）。这也是为了用户的信息安全。
 * 如果在浏览器环境外（例如服务器上）使用 JavaScript，则不存在此类限制。
 */
